import request from '@/utils/request'
import { ApiModulesRoutes } from '@/consts.js'

/**
 * 分页获取设备产品信息
 * @param params
 * @param {Object} params.deviceVo
 * @param {String} params.deviceVo.id
 * @param {String} params.deviceVo.name
 *  @param {String} params.metadataId
 * @param {Number} params.pageNo
 * @param {Number} params.pageSize
 * @returns {Promise<void>}
 */
export const apiFindProductPageByParam = async params => {
  const url = ApiModulesRoutes.IOT + '/product/findProductPageByParam'
  return await request.post(url, params)
}
/**
 * 添加产品
 * @param {Object} product
 * @param {String} product.name 产品名称
 * @param {'WIFI'|'NETWORKING'} product.netType 入网方式 WIFI:直连,NETWORKING:组网
 * @param {String|Boolean} product.publishState 产品发布状态
 * @param {String} product.metadataId 物模型id
 * @param {String} product.remark 备注说明
 * @returns {Promise<void>}
 */
export const apiAddProduct = async product => {
  const url = ApiModulesRoutes.IOT + '/product/addProduct'
  return await request.post(url, product)
}

/**
 * 删除指定产品
 * @param {String} productId 产品id
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiDelProductById = async productId => {
  const url = ApiModulesRoutes.IOT + '/product/delProductById'
  return await request.get(url, { params: { productId } })
}

/**
 * 修改产品
 * @param productVo
 * @param {String} productVo.name 产品名称
 * @param {'WIFI'|'NETWORKING'} productVo.netType 入网方式 WIFI:直连,NETWORKING:组网
 * @param {String|Boolean} productVo.publishState 产品发布状态
 * @param {String} productVo.metadataId 物模型id
 * @param {String} productVo.remark 备注说明
 * @returns {Promise<void>}
 */
export const apiUpdateProduct = async productVo => {
  const url = ApiModulesRoutes.IOT + '/product/updateProduct'
  return await request.post(url, productVo)
}
/**
 * 根据productId查询产品详情
 * @param {String} productId 产品Id
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiFindProductById = async productId => {
  const url = ApiModulesRoutes.IOT + '/product/findProductById'
  return await request.get(url, { params: { productId } })
}

/**
 * 获取所有产品
 * @param {String} keyword 暂时没有
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiFindProductList = async keyword => {
  const url = ApiModulesRoutes.IOT + '/product/findPList'
  return await request.get(url, { params: { keyword } })
}

/**
 * 通过物联网id获取属性列表
 * @param {String} metadataId 物模型id
 */
export const apiFindPropertyListByMetadataId = async metadataId => {
  const url = ApiModulesRoutes.IOT + '/property/findPropertyListByMetadataId'
  return await request.get(url, { params: { metadataId } })
}

/**
 * 通过物模型获取服务列表
 * @param {String} metadataId 物模型id
 */
export const apiFindServiceListByMetadataId = async metadataId => {
  const url = ApiModulesRoutes.IOT + '/Services/findServiceListByMetadataId'
  return await request.get(url, { params: { metadataId } })
}

/**
 * 获取所有产品
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiFindAllProducts = async () => {
  const url = ApiModulesRoutes.IOT + '/product/findPList'
  return await request.get(url)
}

/**
 * 控制大道机器人
 * @param deviceId
 * @param lineSpeed
 * @param angularVelocity
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiSetOperateSpeed = async (deviceId, lineSpeed, angularVelocity) => {
  const url = ApiModulesRoutes.IOT + '/dadao/setOperateSpeed'
  return await request.get(url, { params: { deviceId, lineSpeed, angularVelocity } })
}


/**
 * 设置产品图标
 * @param {String} id 产品id
 * @param {String} icon base64的字符串格式
 * @returns {Promise<AxiosResponse<any>>}
 */
export const apiSetProductIcon = async (id, icon) => {
  const url = ApiModulesRoutes.IOT + '/product/setProductIcon'
  return await request.post(url, { id, icon})
}


/**
 * 分页查询设备列表
 * @param {String} data.pageNo
 * @param {String} data.pageSize
 * @param {String} data.keyword
 */

export function findIotEventPageByParam(data) {
  return request({
    url: `${ApiModulesRoutes.IOT}/event/findIotEventPageByParam`,
    method: 'POST',
    data,
  })
}
